﻿//ChartTransactionElement.cs
//Copyright (c) 2013 StockSharp LLC, all rights reserved.
//This code module is part of StockSharp library.
//This code is licensed under the GNU GENERAL PUBLIC LICENSE Version 3.
//See the file License.txt for the license details.
//More info on: http://stocksharp.com

namespace StockSharp.Xaml
{
	using System.ComponentModel;
	using System.Windows.Media;

	using Ecng.Serialization;

	/// <summary>
	/// Базовые класс, описывающий элемент графика Заявки или Сделки.
	/// </summary>
	/// <typeparam name="T">Тип элемента.</typeparam>
	public abstract class ChartTransactionElement<T> : ChartElement<T>
		where T : ChartTransactionElement<T>, new()
	{
		/// <summary>
		/// Инициализировать <see cref="ChartTransactionElement{T}"/>.
		/// </summary>
		protected ChartTransactionElement()
		{
			BuyColor = Colors.Green;
			SellColor = Colors.Red;
		}

		/// <summary>
		/// Цвет графического элемента на графике, обозначающий покупку.
		/// </summary>
		[DisplayName("Цвет покупки")]
		[Description("Цвет графического элемента на графике, обозначающий покупку.")]
		[Category(ViewCategory)]
		public Color BuyColor { get; set; }

		/// <summary>
		/// Цвет графического элемента на графике, обозначающий продажу.
		/// </summary>
		[DisplayName("Цвет покупки")]
		[Description("Цвет графического элемента на графике, обозначающий продажу.")]
		[Category(ViewCategory)]
		public Color SellColor { get; set; }

		/// <summary>
		/// Загрузить настройки.
		/// </summary>
		/// <param name="storage">Хранилище настроек.</param>
		public override void Load(SettingsStorage storage)
		{
			base.Load(storage);

			var b = storage.GetValue<SettingsStorage>("BuyColor");
			var s = storage.GetValue<SettingsStorage>("SellColor");

			if (b != null)
				BuyColor = b.ToColor();

			if (s != null)
				SellColor = s.ToColor();
		}

		/// <summary>
		/// Сохранить настройки.
		/// </summary>
		/// <param name="storage">Хранилище настроек.</param>
		public override void Save(SettingsStorage storage)
		{
			base.Save(storage);

			storage.SetValue("BuyColor", BuyColor.ToStorage());
			storage.SetValue("ColorPriceUp", SellColor.ToStorage());
		}

		/// <summary>
		/// Заполнить копию элемента.
		/// </summary>
		/// <param name="elem">Копия.</param>
		/// <returns>Копия.</returns>
		protected override T FillClone(T elem)
		{
			elem.BuyColor = BuyColor;
			elem.SellColor = SellColor;
			return base.FillClone(elem);
		}

		/// <summary>
		/// Создать копию элемента.
		/// </summary>
		/// <returns>Копия.</returns>
		public override T Clone()
		{
			return FillClone(new T());
		}
	}
}